import { BasicFormBox } from "../basic-form-box";
import { BasicTaleBox } from "../basic-table-box";
import { BasicTree } from "../basic-tree-box";

/** 工作流全局配置 */
interface WorkflowOption {
	/** 步骤进行完毕的颜色 */
	activeColor?: string;
	/** 步骤未进行的颜色 */
	noActiveColor?: string;
	/** 是否显示步骤条 */
	showSteps?: boolean;
}

/** 工作流状态 */
interface WorkflowStates {
	/** 禁用 */
	disabled?: boolean;
	/** 是否允许(置灰)下一步 数据未填写完毕 置灰下一步 */
	allowNextStep?: boolean;
	/** 是否允许(置灰)上一步  */
	allowPrevStep?: boolean;
}

/** 工作状态 */
type StepState = "start" | "afoot" | "end";

/** 回调类型 */
type FlCallback<T> = (info: WorkflowInfo<T>, data: Record<string, any>) => void;

/** 组件类型 */
type WorkComponent = BasicFormBox<any> | BasicTaleBox<any> | BasicTree;

/** 工作流单项配置 */
interface Workflow<T, K extends keyof T> {
	/** 步骤唯一 key */
	key: K;
	label: string;
	/** 表单配置项 */
	option: T[K];
	/** 排序 */
	workflowSortNum?: number;
	/** 状态 */
	workflowState?: WorkflowStates;
}

interface WorkflowInfo<T> {
	/** key */
	key: keyof T;
	/** 当前步数 */
	currentStep: number;
	/** 当前数据 */
	currentData: any;
	/** 目标步骤数据 */
	toData: any;
	/** 目标步骤 */
	toStep: number;
	/** 开始到结束的状态 */
	stepState: StepState;
}

export type {
	WorkflowInfo,
	Workflow,
	WorkflowOption,
	FlCallback,
	WorkflowStates,
	StepState,
	WorkComponent,
};
